from django_redis import get_redis_connection
import base64
import pickle

"""登陆合并购物车"""


def merge_cart_cookie_to_redis(request, user, response):
    """
    未登录用户进行登陆时,合并购物车信息,未登录用户保留cookie里的数据
    # 1.获取cookie里购物车的数据,存在数据:
    # 1.1获取该用户redis里的数据信息
    # 1.2获取cookie里的数据信息,并将cookie里的数据转换成reids里的数据类型
    # 1.3 保存数据到redis
    # 1.4 删除cookie里的数据
    # 1.5 返回响应
    # 2.cookie里不存在cookie数据,直接返回
    """
    # 1.获取cookie里购物车的数据,存在数据:
    cookie_str = request.COOKIES.get('cart')
    # 存在数据
    if cookie_str is not None:
        cart_bytes = base64.b64decode(cookie_str.encode())
        cookis_cart = pickle.loads(cart_bytes)
        # 1.1获取该用户redis里的数据信息   # user.id={sku_id:count,sku_id:count}
        redis_conn = get_redis_connection('cart')
        redis_cart = redis_conn.hgetall('cart_%s' % user.id)
        cart = {}
        for sku_id, count in redis_cart.items():
            cart[sku_id] = count
        # 1.2获取cookie里的数据信息,并将cookie里的数据转换成reids里的数据类型    cart = {sku_id:{'count':xxx,'selected':xxxx},...}
        selected_sku_id_list = []
        for sku_id, selected_count_dict in cookis_cart.items():
            cart[sku_id] = selected_count_dict['count']
            # 选择状态
            if selected_count_dict['selected']:
                selected_sku_id_list.append(sku_id)
        # 1.3 保存数据到redis
        p1 = redis_conn.pipeline()
        p1.hmset('cart_%s' % user.id, cart)
        p1.sadd('cart_selected_%s' % user.id, *selected_sku_id_list)
        p1.execute()
        # 1.4 删除cookie里的数据
        response.delete_cookie('cart')
        # 1.5 返回响应
        return response
    # 2.cookie里不存在cookie数据,直接返回
    else:
        return response
